package com.imc.platform.base.user.dao.mapper;

import com.imc.api.order.pojo.UserOrgAccount;
import com.imc.platform.base.user.pojo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.cache.annotation.Cacheable;

import java.util.List;
import java.util.Map;

/**
 * Created by tanweiping on 2018/7/23.
 */
@Mapper
public interface IUserMapper {

    /**
    *QY 2018/9/10 15:39
    *方法描述：查询所有用户详情
    **/
    @Select("select * from t_user where t_user.loginName !='admin' order by t_user.createTime asc")
    List<Map> queryAll();

    /**
    *QY 2018/9/10 15:39
    *方法描述：根据用户名称查询用户详情
    **/
    List<User> queryUserByLoginName(String loginName);

    /**
     *QY 2018/9/10 15:39
     *方法描述：根据用户名称查询用户详情
     **/
    List<User> queryUserByLoginNameCommon(String loginName);

//    @Cacheable(value = "user",key = "#loginName")
    User queryRoleUserByLoginName(String loginName);
    /**
    *QY 2018/9/10 15:40
    *方法描述：根据角色ID查询用户详情
    **/
    List<User> queryUserListByRoleId(String roleId);

    /**
    *QY 2018/9/10 15:40
    *方法描述：根据用户ID查询用户详情
    **/
    List<User> queryUserListByUserId(@Param("userList") List<String>userList);

    /**
    *QY 2018/9/10 15:40
    *方法描述：根据用户名称模糊查询用户详情
    **/
    List<User> queryUserByUserName2(@Param("selectParms")String selectParms,@Param("orgName")String orgName,@Param("duty")String duty,@Param("orgId")String orgId,@Param("type")String type);

    List<User> queryUserByUserName(@Param("selectParms")String selectParms,@Param("orgName")String orgName,@Param("duty")String duty);

    /**
    *QY 2018/9/10 15:41
    *方法描述：根据角色ID以及用户名称模糊查询用户详情
    **/
    List<User> queryUserBySelectUserName(@Param("selectParms")String selectParms,@Param("roleId") String roleId);

    /**
    *QY 2018/9/10 15:42
    *方法描述：添加用户详情
    **/
    int addUser(@Param("parms")Map<String,Object>parms);

    /**
    *QY 2018/9/10 15:42
    *方法描述：根据用户ID修改用户详情
    **/
    int updateUserByUserId(@Param("parms")Map<String,Object>parms);

    /**
    *QY 2018/9/10 15:42
    *方法描述：根据用户ID删除用户
    **/
    int delUserById(String userId);

    int delUserSubById(String id);

    /**
    *QY 2018/9/10 15:42
    *方法描述：根据用户ID删除用户与角色的ID
    **/
    int delUserRoleByUserId(String userId);

    /**
    *QY 2018/9/10 15:43
    *方法描述：根据用户ID删除用户与组织机构的关联关系
    **/
    int delUserOrgByUserId(String userId);

    /**
    *QY 2018/9/10 15:43
    *方法描述：根据用户ID查询用户详情
    **/
    User queryUserById(String userId);

    UserSub queryUserOrgAccountByOrgIdAndParentId(@Param("orgId")String orgId, @Param("parentId")String parentId);

    /**
    *QY 2018/9/10 15:44
    *方法描述：修改用户状态
    **/
    int updateState(@Param("state") String state,@Param("userId") String userId);

    int updateUserOrgAccountLessonAccount(@Param("orgId") String orgId,@Param("parentId") String parentId,@Param("lessonAccount") String lessonAccount,@Param("updateTime")String updateTime);

    int insertUserOrgAccountLessonAccount(UserOrgAccount userOrgAccount);

    /**
    *QY 2018/9/10 15:44
    *方法描述：添加用户与组织结构的关联关系
    **/
    int addUserOrgList(Map<String,Object>resMap);

    /**
    *QY 2018/9/10 15:44
    *方法描述：根据用户ID查询用户与组织结构的关联
    **/
    List<String> queryUserOrgByUserId(String userId);


    List<Map> queryUsersByLessonId(@Param("schduleId")String schduleId);

    void addUserAttach(UserAttach userAttach);

    List<UserAttach> queryUserDescAllByUserId(String userId);

    List<Map<String,Object>> queryUserDescAndAttachAllByUserId(String userId);

    void updateUserDesc(User user);

    void delUserAttach(@Param("id") String id,@Param("imgUrl") String imgUrl);

    List<User> queryUserNoStudent(String name);

    void updateUserImgByUserId(@Param("imgUrl")String imgUrl ,@Param("userId") String userId);

    void addUserSubaccount(UserSub userSub);

    List<UserSub>queryUserSubList(String userId);

    UserSub queryUserSub(String subaccountId);

    void delUserSub(String subaccountId);

    void updateUserSub(@Param("userSub") UserSub userSub);

    void changePassWord(Map<String,String> map);

    void updateUserDuty(Map<String,Object>parms);

    void updateOrgIdByUserSubId(@Param("orgId") String orgId,@Param("userSubId") String userSubId);

    void updateOrgIdByUserSubIdAndOrderId(@Param("orderId") String orderId,@Param("userSubId") String userSubId);

    UserOrgAccount queryOrderByUserId(@Param("parms") Map<String,Object>parms);

    void updateOrderByUserId(@Param("parms") Map<String,Object>parms);

    UserOrgAccount queryOrderById(String id);

    int insertUserCountLog(UserCountLog userCountLog);

    User queryUserByLoginName1(String loginName);

    List<UserSub> queryUserSubById(@Param("id")String id,@Param("orgId")String orgId,@Param("currentUserId")String currentUserId,@Param("dutyFlag")String dutyFlag);

    UserOrgAccount queryUserOrgAccount(String userId);

    List<UserCountLog> getUserACountById(String userCountId);

    int updateLessonAccountById(UserOrgAccount userOrgAccount);
}
